package jermedit.gobjekte;

import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import javax.swing.SwingUtilities;


public class ObjectifiedAssociation extends PolygonObject {
    //Objektifizierter Assoziationstyp
    private int rauteBreite;
    private int rauteLaenge;
    Association raute;

    public Association getRaute() {
        return raute;
    }

    public ObjectifiedAssociation (int x, int y, int id){
        this.x = x;
        this.y = y;
        this.name="";
        this.id = id;
        rauteBreite=30;
        rauteLaenge=15;
        breite = 100;
        laenge = 50;
       
       // von Rechteck
       boundingBox = (new Rectangle (x-breite/2,y-laenge/2, breite, laenge)).getBounds();
        obenmitte = new EditPoint (x,y-laenge/2);
        mittelinks = new EditPoint(x-breite/2,y);
        mitterechts = new EditPoint(x+breite/2,y);
        untenmitte = new EditPoint(x,y+laenge/2);
        
        raute = new Association(x,y, id + 10000); // fängen von 10,000
        raute.umbenennen("");
    }

    @Override
    public void drawSub(Graphics2D g2) {
    //Raute
       int x2Points[] = {x, x+rauteBreite, x, x-rauteBreite};
       int y2Points[] = {y-rauteLaenge, y, y+rauteLaenge, y};
       raute.drawSub(g2);
       
       FontMetrics fm = g2.getFontMetrics();
       int strWidth = SwingUtilities.computeStringWidth(fm, name);
       g2.drawString(name, x-strWidth/2, y+fm.getAscent()/2);
    
      //Rechteck
       g2.drawRect(x-breite/2,y-laenge/2, breite, laenge);
    }

    @Override
    public boolean isInArea(int x, int y) {
        return (x > this.x-breite/2  && x < this.x+breite/2 && y > this.y-laenge/2  && y < this.y+laenge/2);
    }
    
    public void move(int x, int y){
        super.move(x, y);
        boundingBox.move(x-breite,y-laenge);

        //Verschiebe die Eckpunkte zusammen mit dem Basistyp
        obenmitte.move(x,y-laenge/2);
        mittelinks.move(x-breite/2,y);
        mitterechts.move(x+breite/2,y);
        untenmitte.move(x,y+laenge/2);
        raute.move(x,y);
        
    }

    @Override
    public Point linkerObenEckpunkt(){
        Point liOben = new Point(x-breite/2,y-laenge /2);
        return liOben;
    }

    @Override
    public Point rechterObenEckpunkt(){
        Point reOben = new Point(x+breite/2,y-laenge/2);
        return reOben;
    }

    @Override
    public Point linkerUntenEckpunkt(){
        Point liUnten = new Point(x-breite/2,y+laenge/2);
        return liUnten;
    }
    
    @Override
    public Point rechterUntenEckpunkt(){
        Point reUnten = new Point(x+breite/2,y+laenge/2);
        return reUnten;
    }
    
    public void setRauteBreite(int rauteBreite) {
        this.rauteBreite = rauteBreite;
        raute.setBreite(rauteBreite);
        
    }

    public void setRauteLaenge(int rauteLaenge) {
        this.rauteLaenge = rauteLaenge;
        raute.setLaenge(rauteLaenge);
    }
    public int getRauteBreite() {
        return rauteBreite;
    }

    public int getRauteLaenge() {
        return rauteLaenge;
    }
}